package com.example.demo;

import com.example.demo.model.User;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RequestMapping("/param")
@RestController
public class ParamController {
    @RequestMapping("/p1")
    public String p1(String name){
        return "接收到参数 name = " + name;
    }

    @RequestMapping("/p2")
    public boolean p2(boolean flag){
        //可以接受false 和 true ,其中接收0为false, 1为true, 其他整数都不行
        return flag;
    }

    @RequestMapping("/p3")
    public String p3(Integer age){
        return "接收到了参数: " + age;
    }

    @RequestMapping("/p4")
    public String p4(int age){
        //与p3进行对比, 当p3的参数接收到了空值, 会直接返回null,而用int的话接收到了空值会直接报错
        return "接收到的参数: " + age;
    }

    @RequestMapping("/p5")
    public String p5(String name,Integer age){
        return "接收到名字: " + name + " 接收到年龄: " + age;
    }

    @RequestMapping("/p6")
    public String p6(User user){
        //age如果输入的话不可以为空, 其他的传输了名称但是不包含值也可以, age是int类型必须要传值
        //如果都没有传age为0,其他为空
        return "接收到的" + user;
    }

    //给参数重命名
    @RequestMapping("/p7")
    public String p7(@RequestParam("userName") String name, Integer age){
        //重命名以后send不可以使用name要使用userName
        return "接收到名字: " + name + " 接收到年龄: " + age;
    }

    @RequestMapping("/p77")
    public String p77(@RequestParam(value = "userName",required = false) String name, Integer age){
        //重命名以后send不可以使用name要使用userName, required默认是true, 如果是true没传参数会报错, 改成false就不会了
        return "接收到名字: " + name + " 接收到年龄: " + age;
    }

    @RequestMapping("/p8")
    public String p8(String[] arr){
        //
        return "arr" + List.of(arr);
    }

    @RequestMapping("/p9")
    public String p9(@RequestParam("list1") List<String> list){
        //绑定参数, 并解析成List<String> 的类型
        return "list: " + list;
    }

    @RequestMapping("/p10")
    public String p10(@RequestBody User user){
        //可以获取主体部分的值, 转换json
        return "user: " + user;
    }

    //可以获取url的值
    @RequestMapping("/article/{articleId}")
    public String p11(@PathVariable("articleId") String articleId){
        return "articleId: " + articleId;
    }

    @RequestMapping("/article/{articleId}/{name}")
    public String p12(@PathVariable("articleId") String Id,@PathVariable String name){
        //名称相同可以不写, 名称不同就一定要在注释里面写

        return "articleId: " + Id + " name: " + name;
    }

    @RequestMapping("/p13")
    public String p13(MultipartFile file){
        return "";
    }
}
